package edu.upc.clase.demo.controller;

import edu.upc.clase.demo.entity.Credential;
import edu.upc.clase.demo.entity.CriterioBusqueda;
import edu.upc.clase.demo.entity.Usuario;
import edu.upc.clase.demo.service.UsuarioService;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author gian
 */
@Controller("usuarioController")
public class UsuarioController {

    @Autowired
    private UsuarioService usuarioService;
    private static Logger log = LoggerFactory.getLogger(UsuarioController.class);

    
    @RequestMapping("/Usuario/home")
    public ModelAndView home() {
        ModelAndView mav = new ModelAndView("Usuario/home");
        List<Usuario> usuarios = usuarioService.buscarPorTipo("SABI");
        CriterioBusqueda criterioBusqueda = new CriterioBusqueda();
        mav.addObject("usuarios", usuarios);
        mav.addObject("criterioBusqueda",criterioBusqueda);
        
        Credential credential = new Credential();
        mav.getModelMap().put("credential", credential);        
        
        
        
        return mav;
    }
    
    
    @RequestMapping(value = "/Usuario/webtipousuario", method = RequestMethod.GET)
    public ModelAndView ViewUserEmprendedor() {
        ModelAndView mav = new ModelAndView("Usuario/webtipousuario");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }

    @RequestMapping(value = "/Usuario/registrateEmprendedor", method = RequestMethod.GET)
    public ModelAndView newUserEmprendedor() {
        ModelAndView mav = new ModelAndView("Usuario/registrateEmprendedor");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }

    
    @RequestMapping(value = "/Usuario/registrateSabio", method = RequestMethod.GET)
    public ModelAndView newUserSabio() {
        ModelAndView mav = new ModelAndView("Usuario/registrateSabio");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }

    
    @RequestMapping(value = "/Usuario/webQuienesSomos", method = RequestMethod.GET)
    public ModelAndView quienesSomos() {
        ModelAndView mav = new ModelAndView("Usuario/webQuienesSomos");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }

        
    @RequestMapping(value = "/Usuario/webContactenos", method = RequestMethod.GET)
    public ModelAndView webContactenos() {
        ModelAndView mav = new ModelAndView("Usuario/webContactenos");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }
    
    
    @RequestMapping(value = "/Usuario/webListaPlanes", method = RequestMethod.GET)
    public ModelAndView webListaPlanes() {
        ModelAndView mav = new ModelAndView("Usuario/webListaPlanes");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }
        

    @RequestMapping(value = "/Usuario/webDetallePlan", method = RequestMethod.GET)
    public ModelAndView webDetallePlanes() {
        ModelAndView mav = new ModelAndView("Usuario/webDetallePlan");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }
        
     
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    @RequestMapping("/Usuario/index")
    public ModelAndView index() {
        ModelAndView mav = new ModelAndView("Usuario/index");
        List<Usuario> usuarios = usuarioService.buscarPorTipo("EMPR");
        CriterioBusqueda criterioBusqueda = new CriterioBusqueda();
        mav.addObject("usuarios", usuarios);
        mav.addObject("criterioBusqueda",criterioBusqueda);
        return mav;
    }
    

    @RequestMapping("/Usuario/sabios")
    public ModelAndView sabios() {
        ModelAndView mav = new ModelAndView("Usuario/sabios");
        List<Usuario> usuarios = usuarioService.buscarPorTipo("SABI");
        CriterioBusqueda criterioBusqueda = new CriterioBusqueda();
        mav.addObject("usuarios", usuarios);
        mav.addObject("criterioBusqueda",criterioBusqueda);
        return mav;
    }    
    

    /**********************PARA CRAR UN SABIO****************************/
    
    @RequestMapping(value = "/Usuario/newSabio", method = RequestMethod.GET)
    public ModelAndView newSabio() {
        ModelAndView mav = new ModelAndView("Usuario/newSabio");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }
       
    @RequestMapping(value = "/Usuario/newSabio", method = RequestMethod.POST)
    public String createSabio(@ModelAttribute("usuario")Usuario usuario, SessionStatus status) {    
        usuarioService.insertar(usuario);
        status.setComplete();

        return "redirect:/pages/Usuario/sabios";
        
    }    
    
    
    
    @RequestMapping(value = "/Usuario/editSabio", method = RequestMethod.GET)
    public ModelAndView editSabio(@RequestParam("idUsuario")Integer idUsuario) {    
        ModelAndView mav = new ModelAndView("Usuario/editSabio");
        Usuario usuario = usuarioService.buscar(idUsuario);
        mav.getModelMap().put("usuario", usuario);
        return mav;        
    }
    
    @RequestMapping(value="/Usuario/editSabio", method=RequestMethod.POST)
    public String updateSabio(@ModelAttribute("usuario") Usuario usuario, SessionStatus status) {
        usuarioService.actualizar(usuario);
        status.setComplete();
        return "redirect:/pages/Usuario/index";
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    @RequestMapping(value = "/Usuario/new", method = RequestMethod.GET)
    public ModelAndView newUsuario() {
        ModelAndView mav = new ModelAndView("Usuario/new");
        Usuario usuario = new Usuario();
        mav.getModelMap().put("usuario", usuario);
        return mav;
    }

    @RequestMapping(value = "/Usuario/new", method = RequestMethod.POST)
    public String createUsuario(@ModelAttribute("usuario")Usuario usuario, SessionStatus status) {    
        usuarioService.insertar(usuario);
        status.setComplete();

        return "redirect:/pages/Usuario/index";
        
    }
    
    @RequestMapping(value = "/Usuario/edit", method = RequestMethod.GET)
    public ModelAndView editUsuario(@RequestParam("idUsuario")Integer idUsuario) {    
        ModelAndView mav = new ModelAndView("Usuario/edit");
        Usuario usuario = usuarioService.buscar(idUsuario);
        mav.getModelMap().put("usuario", usuario);
        return mav;        
    }
    
    @RequestMapping(value="/Usuario/edit", method=RequestMethod.POST)
    public String update(@ModelAttribute("usuario") Usuario usuario, SessionStatus status) {
        usuarioService.actualizar(usuario);
        status.setComplete();
        return "redirect:/pages/Usuario/index";
    }
    
    @RequestMapping("/Usuario/delete")
    public ModelAndView delete(@RequestParam("idUsuario")Integer idUsuario)
    {
        ModelAndView mav = new ModelAndView("redirect:/pages/Usuario/index");
        Usuario usuario = usuarioService.buscar(idUsuario);
        usuarioService.eliminar(usuario);
        return mav;
    }
    
    @RequestMapping("/Usuario/login")
    public ModelAndView login() {
        ModelAndView mav = new ModelAndView("Usuario/login");
        Credential credential = new Credential();
        mav.getModelMap().put("credential", credential);
        return mav;
    }    
        
    @RequestMapping(value = "/Usuario/autenticar", method=RequestMethod.POST)
    public String autenticar(@ModelAttribute("credential") Credential credential,HttpServletRequest request) {
        if (usuarioService.autenticar(credential.getCorreo(), credential.getPassword())) {
            request.getSession().setAttribute("credential",credential);
            return "redirect:/pages/Usuario/index";
        }
        return "redirect:/pages/Usuario/login";
    }
    
    @RequestMapping("/Usuario/logout")
    public String logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return "redirect:/pages/Usuario/login";
    }        
        
    @RequestMapping(value = "/Usuario/buscar", method=RequestMethod.POST)
    public ModelAndView buscar(@ModelAttribute("criterioBusqueda") CriterioBusqueda criterio, SessionStatus status) {
        ModelAndView mav = new ModelAndView("Usuario/resultadoBusqueda");
        log.info("usuarios = " + usuarioService.buscarPorNombre(criterio.getNombre()).size());
        mav.getModel().put("usuarios",usuarioService.buscarPorNombre(criterio.getNombre()));
        return mav;
    }
    
}
